求助!!~~`` 这段程序的运行顺序

来源:百度知道 编辑:UC知道 时间:2024/06/30 17:11:38
这里的运行顺序是怎样的?

#include<stdio.h>
sub(int *a,int n,int k);
void main()
{
int x=0;
sub(&x,8,1);
printf("x=%d\n",x);
}
sub(int *a,int n,int k)
{
if(k<=n)
sub(a,n/2,2*k); //运行到这里接下来怎样啦??是到下一句吗??
*a+=k; // 运行到这里是不是返回 主函数变量x那里 然后就输出结果啦啦???????????
// 还有那个 a 是怎么回事 怎么变化的啊????
}

一个递归 函数
sub(a,n/2,2*k); //运行到这里接下来怎样啦??是到下一句吗??
这里是调用函数 就是再调用一次
再用里面的参数调用一次函数 直到 k<=n 就不调用了
按缘路返回 但是这个函数没返回值 用指针修改变量
所以就是 调用一次函数就等于执行了一次 *a+=k;

sub(a,n/2,2*k);//这是对sub()的递归调用,程序将再次调用sub,参数是a,n/2,2*k

建议参阅有关递归的资料:

http://baike.baidu.com/view/633266.html

呵呵,都是初学者